package util;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class PinyinUtil {
    // 第一个参数表示要获取拼音的字符串
    // 第二个参数表示是否要全拼"基础语法"+“true” -> jichuyufa
    // "基础语法" + “false” -> jcyf
    public static String get(String src,boolean fullSpell) {
        if(src == null || src.trim().length() == 0) {
            // 空的字符串
            return null;
        }
        // 针对Pinyin4j 进行配置 让他输出这个yu 能够用 v 表示
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setVCharType(HanyuPinyinVCharType.WITH_V);

        // 遍历字符串中的每个字符，针对每个字符串分别进行转换，把转化后的拼音结果拼接到StringBuilder
        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0;i < src.length();i++) {
            char ch = src.charAt(i);
            // 针对单个字符进行转换
            String[] tmp = new String[0];
            try {
                tmp = PinyinHelper.toHanyuPinyinStringArray(ch,format);
                if(tmp == null || tmp.length == 0) {
                    // 没有拼音转化失败
                    // 可能没有汉语拼音但是有 a b c 1 2 3
                    // 保留原始字符，直接把原始字符加入结果中
                    stringBuffer.append(ch);
                }else if(fullSpell) {
                    // 拼音结果非空，并且获取完整的全拼
                    stringBuffer.append(tmp[0]);
                }else {
                    // 拼音非空，获取首字母
                    stringBuffer.append(tmp[0].charAt(0));
                }
            } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
                badHanyuPinyinOutputFormatCombination.printStackTrace();
            }
        }
        return stringBuffer.toString();
    }
}
